package com.molichuxing.gateway.api.services;

import java.util.List;

import com.molichuxing.framework.dto.Paged;
import com.molichuxing.framework.result.ResponseResult;
import com.molichuxing.gateway.bff.basic.entity.response.VehicleMakeVo;
import com.molichuxing.gateway.bff.goods.entity.response.*;
import org.springframework.web.bind.annotation.RequestParam;

/**
 * 商品信息web接口
 * @author xuelin yi
 */
public interface GoodsApiService {


    /**
     * 根据商品id判断商品是否禁售
     * @param goodsId
     * @param storeId
     * @return
     * @throws Exception
     */
    public ResponseResult<Boolean> isProhibited(Integer goodsId, Integer storeId) throws Exception;

    /**
     * 获取商品信息列表
     * @param pageNum
     * @param pageSize
     * @return
     */
    public ResponseResult<Paged<GoodsVo>> getAppGoodsList(Integer storeId, Integer pageNum, Integer pageSize);


	/**
	 * 获取商品信息列表
	 * @param pageNum
	 * @param pageSize
	 * @return
	 */
	public ResponseResult<Paged<GoodsVo>> getAppGoodsListNew(Integer storeId, Integer sortFlag,String goodsType,
															 Integer startBudget,
															 Integer endBudget,
															 Integer startTime,
															 Integer endTime, Integer pageNum, Integer pageSize);

    /**
     * 获取商品的热销车型
     * @return
     */
    public ResponseResult<List<GoodsVo>> getSellWellGoodsList();

    /**
     * 根据商品id、里程包id获取商品信息
     * @param goodsId
     * @param packageId
     * @return
     */
    public ResponseResult<GoodsAppDetailVo> getAppGoods(Integer goodsId, Integer packageId);

    /**
     * 获取专属商品的抽屉信息
     * @param goodsId
     * @return
     * @throws Exception
     */
    public ResponseResult<GoodsExclusiveDrawerVo> getAppExclusiveGoods(Integer goodsId, Integer storeId) throws Exception;

    /**
     * 获取订阅商品的抽屉信息
     * @param goodsId
     * @param packageId
     * @return
     * @throws Exception
     */
    public ResponseResult<GoodsSubscribeDrawerVo> getAppSubscribeGoods(Integer goodsId, Integer packageId, Integer storeId) throws Exception;


    /**
     * 根据商品id、里程包id确认订单
     * @param goodsId
     * @param packageId
     * @return
     */
    public ResponseResult<GoodsAppConfirmDetailVo> getAppConfirmGoods(Integer goodsId, Integer packageId);

	/**
	 * 订阅续订商品信息
	 * 
	 * @param orderCode
	 * @return
	 */
	public ResponseResult<GoodsRenewVo> goodsRenew(Long orderCode);

	/**
	 * 订阅加购商品信息
	 * 
	 * @param orderCode
	 * @return
	 */
	public ResponseResult<GoodsPurchaseVo> goodsPurchase(Long orderCode);

	/**
	 * 订阅续订确认订单
	 * 
	 * @param token
	 * @param orderCode
	 * @param goodsId
	 * @param packageId
	 * @return
	 */
	public ResponseResult<GoodsConfirmVo> goodsRenewConfirm(String token, Long orderCode, Integer goodsId,
			Integer packageId);

	/**
	 * 订阅加购确认订单
	 * 
	 * @param token
	 * @param orderCode
	 * @param goodsId
	 * @param packageId
	 * @return
	 */
	public ResponseResult<GoodsConfirmVo> goodsPurchaseConfirm(String token, Long orderCode, Integer goodsId,
			Integer packageId);


	/**
	 * 根据门店id获取品牌信息
	 * @param storeId
	 * @return
	 */
	public ResponseResult<List<VehicleMakeVo>> getBrandByStoreId(Integer storeId);

    /**
     * 获取大屏商品信息列表
     * @param storeId
     * @param brandId
     * @return
     */
    public ResponseResult<List<GoodsBigScreenVo>> getBigScreenGoodsList(Integer storeId, Integer brandId);

	/**
	 *根据商品类型获取图片详情
	 * @param goodsType
	 * @return
	 */
    public ResponseResult<List<GoodsIntroduceVo>> getGoodsIntroduce(Integer goodsType);
}
